package co.yixiang.yshop.module.product.service.storeproduct;

import co.yixiang.yshop.module.product.controller.app.product.param.AppStoreProductQueryParam;
import co.yixiang.yshop.module.product.controller.app.product.vo.AppProductVo;
import co.yixiang.yshop.module.product.controller.app.product.vo.AppStoreProductDetailReqVo;
import co.yixiang.yshop.module.product.controller.app.product.vo.AppStoreProductRespVo;
import co.yixiang.yshop.module.product.dal.dataobject.storeproduct.StoreProductDO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Set;

/**
 * 商品 AppService 接口
 *
 * @author yshop
 */
public interface AppStoreProductService extends IService<StoreProductDO> {

    /**
     * 商品列表
     *
     * @param page  页码
     * @param limit 条数
     * @param order ProductEnum
     * @return List
     */
    List<AppStoreProductRespVo> getList(int page, int limit, int order);

    /**
     * 商品列表
     *
     * @param productQueryParam AppStoreProductQueryParam
     * @return list
     */
    List<AppStoreProductRespVo> getGoodsList(AppStoreProductQueryParam productQueryParam);

    /**
     * 商品详情
     *
     * @param vo
     * @param uid 用户id
     * @return ProductVo
     */
    AppProductVo goodsDetail(AppStoreProductDetailReqVo vo, Long uid);

    /**
     * 返回普通商品库存
     *
     * @param productId 商品id
     * @param unique    sku唯一值
    * @param type    1:普通下单  2：活动下单
     * @return int
     */
    int getProductStock(Long productId, String unique, Integer type,int cartNum);

    /**
     * 获取单个商品
     *
     * @param id 商品id
     * @return YxStoreProductQueryVo
     */
    AppStoreProductRespVo getStoreProductById(Long id);

    /**
     * 获取商品列表
     *
     * @param ids 商品id集合
     * @return
     */
    List<AppStoreProductRespVo> getStoreProductByIds(List<Long> ids);

    /**
     * 减少库存与增加销量
     *
     * @param num       数量
     * @param productId 商品id
     * @param unique    sku
     */
    void decProductStock(int num, Long productId, String unique, Long activityId, String type);

    /**
     * 增加销量
     *
     * @param num       数量
     * @param productId 商品id
     */
    void incSales(Integer num, Long productId);

    /**
     * 增加库存 减少销量
     *
     * @param num       数量
     * @param productId 商品id
     * @param unique    sku唯一值
     * @param type      回退类型
     */
    void incProductStock(Integer num, Long productId, String unique, Integer type);


    /***
     * 用户最近历史搜索
     * @param userId 用户id
     * @return 最近搜索关键字
     */
    Set<String> listRecentSearch(Long userId);

    /***
     * 删除用户最近历史搜索
     * @param userId 用户id
     */
    void removeSearchHistoryAll(Long userId);

    /***
     * 热门搜索
     * @return 热门搜索关键字
     */
    Set<String> searchPopular(Long start, Long end);
}
